//邮箱验证 false 不是邮箱， true 是邮箱
function isEmail(str){
    var reg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
    return reg.test(str);
}

//QQ验证 false 不是QQ， true 是QQ
function isQQ(str){
    var reg =  /^[1-9]\d{4,8}$/;
    return reg.test(str);
}

//null验证  true 是空  false 不是空
function checkNull(parm){
    if (parm == null || parm == "" || parm == "undefined" || parm == "null"){
        return true;
    } else {
        return false;
    }
}

//正整数验证 如果是正整数则返回true ，否则返回false
function isInt(str){
    var reg = /^\+?[1-9][0-9]*$/;　　//正整数
    return reg.test(str);
}

//年龄验证 false 不正常 true 正常
function checkAge(parm){
    if (isInt(parm)){
        if (parm < 0 || parm > 140){
            return false;
        }

    } else {

        return false;
    }
    return true;
}

//验证座机与手机  true 是座机或手机  false 不是座机或手机
function checkTel(tel){
    var mobile = /^1[3|5|8]\d{9}$/ , phone = /^0\d{2,3}-?\d{7,8}$/;
    return mobile.test(tel) || phone.test(tel);
}

/**
 * 更换验证码 (id = codeImage)
 */
function replaceCode() {
    document.getElementById("codeImage").src = "/user/getVerifyCode?" + Math.random();
}




/**
 点击表头对table进行排序= start====================================================================================

 调用方式： 传入table的ID
 window.onload=function(){
   var table = document.getElementById("webTable");
    makeSortable(table);
}
 注意事项：
  表单的表头要是th的，这样才能找到表头
 */
//查找表格的<th>元素，让它们可单击
function makeSortable(table) {
    var headers=table.getElementsByTagName("th");
    for(var i=0;i<headers.length;i++){
        (function(n){
            var flag=false;
            headers[n].onclick=function(){
                // sortrows(table,n);
                var tbody=table.tBodies[0];//第一个<tbody>
                var rows=tbody.getElementsByTagName("tr");//tbody中的所有行
                rows=Array.prototype.slice.call(rows,0);//真实数组中的快照

                //基于第n个<td>元素的值对行排序
                rows.sort(function(row1,row2){
                    var cell1=row1.getElementsByTagName("td")[n];//获得第n个单元格
                    var cell2=row2.getElementsByTagName("td")[n];
                    var val1=cell1.textContent||cell1.innerText;//获得文本内容
                    var val2=cell2.textContent||cell2.innerText;

                    if(val1<val2){
                        return -1;
                    }else if(val1>val2){
                        return 1;
                    }else{
                        return 0;
                    }
                });
                if(flag){
                    rows.reverse();
                }
                //在tbody中按它们的顺序把行添加到最后
                //这将自动把它们从当前位置移走，故没必要预先删除它们
                //如果<tbody>还包含了除了<tr>的任何其他元素，这些节点将会悬浮到顶部位置
                for(var i=0;i<rows.length;i++){
                    tbody.appendChild(rows[i]);
                }

                flag=!flag;
            }
        }(i));
    }
}
/**
 点击表头对table进行排序= end===================================================================================
 */


/**
 头像预览  start ===================================================================================
 示例： 触发该函数即可
        function preview(){
            var config = {
                tip: "请上传格式为png, gif或者jpg的图片",
                fileId: "imgHredFile", //文件上传 input 的那个 id
                containerId: "container", //预览图片的容器的ID
                imgStyle: "width:75px;height:75px;border-radius:100px" //预览图的样式
            }
            var previewer = new ImgPrevirewer(config);
            previewer.preview();
        }
 */

function ImgPrevirewer(config) {

    /**
     * The tag ID for upload images.
     */
    this.fileId = config.fileId;

    /**
     * tip for error message.
     * @type {string}
     */
    this.tip = config.tip;
    /**
     * The ID for the container which contains img tags.
     * @type {string}
     */
    this.containerId = config.containerId;
    /**
     * CSS style for previewing imgs.
     * @type {string}
     */
    this.imgStyle = config.imgStyle;

    /**
     * 过滤图片格式，可进行相对应的删减操作。
     * @type {{jpeg: string, gif: string, png: string}}
     */
    this.filter = {
         //jpg或者jpeg格式的图片。
        "jpeg": "/9j/4",
         //gif格式的图片。
        "gif": "R0lGOD",
         //PNG格式的图片。
        "png": "iVBORw"
    };


    /**
     * 开始预览。自动调用原生JavaScript实现相关元素的定位以及渲染。
     */
    this.preview = function () {
        var file = document.getElementById(this.fileId);

        /**
         * 防止内部作用域覆盖问题。
         * @type {ImgPrevirewer}
         */
        var that = this;
        // HTML5 需要使用FileReader的相关API来读取本地数据。
        if (window.FileReader) {
            // 针对多个上传文件批量处理。
            for (var index = 0, f; f = file.files[index]; index++) {
                var filereader = new FileReader();
                filereader.onload = function (event) {
                    var srcpath = event.target.result;
                    if (!that.validateImg(srcpath)) {
                        console.log(this.tip);
                    } else {
                        that.showPreviewImg(srcpath);
                    }
                };
                filereader.readAsDataURL(f);
            }
        } else {
            // 低版本降级处理。
            if (!/\.jpg$|\.png$|\.gif$/i.test(file.value)) {
                console.log(this.tip);
            } else {
                that.showPreviewImg(file.value);
            }
        }
    }


    /**
     * 根据图片的base64编码格式查看图片是否符合要求。
     * @param data 编码后的图片数据。
     * @returns {*}
     */
    this.validateImg = function (data) {
        var pos = data.indexOf(",") + 1;
        for (var e in this.filter) {
            if (data.indexOf(this.filter[e]) === pos) {
                return e;
            }
        }
        return null;
    }

    /**
     * 开始实现对图片的预览，根据this.imgStyle进行相关渲染操作。
     * @param src
     */
    this.showPreviewImg = function (src) {
        var img = document.createElement('img');
        img.src = src;
        img.style = this.imgStyle;
        var container = document.getElementById(this.containerId);
        container.innerHTML = "";
        container.appendChild(img);
    }


}

/**
 头像预览 end===================================================================================
 */


/**
 * 原生的图片预览，(一些新的浏览器因为安全原因对该种预览有限制)
 *      示例：  <input type="file"  id="photoFile" name="photoFile"  onchange="updateImg(this,'photoFile', 'viewImg')" />
 * @param imgFile this,这个文件
 * @param fileId <input type=file /> 这个文件的id
 * @param viewId 预览的容器id，图片会放置在这里,必须是img 标签
 */
function imgView(imgFile, fileId, viewId){
    var oFile = document.getElementById('photoFile').files[0];    //读取文件
    //验证格式
    var rFilter = /^(image\/bmp|image\/gif|image\/jpeg|image\/png|image\/tiff)$/i;
    if (!rFilter.test(oFile.type)) {
        alert("文件格式必须为图片");
        return;
    }
    var iMaxFilesize = 5 * 1048576; //5M
    if (oFile.size > iMaxFilesize) {
        alert("图片大小不能超过5M");
        return;
    }
    document.getElementById("exhibitionHead").src = window.URL.createObjectURL(imgFile.files[0]);
}


/**
 * 添加基础数据
 * @param btn 自身 this
 * @param optionStr 默认的option
 * @param labelEn 分类id
 * @param id 要将数据添加到哪一个id下，只限 select 标签
 */
function getMovingData(btn, optionStr, labelEn, id) {
    if (checkNull(labelEn) || checkNull((id))){
        alert("参数异常");
        return;
    }
    //加载层
    var index = layer.load(0, {shade: false}); //0代表加载的风格，支持0-2

    var url = "/base/getMovingData.php";
    $.ajax({
        url: url,
        type:"post",
        dataType:"json",
        data:{"labelEn" : labelEn},
        success:function(data){
            if (data.status == "success"){
                var obj = data.object;
                var str = "";
                if (obj != null){
                    //只允许这个事件执行一次，对 该事件清空,防止冒泡
                    btn.onclick = null;
                    removeOptionAll(id);
                    if (!checkNull(optionStr)){
                        str += optionStr;
                    }
                    for (var i = 0; i < obj.length; i ++){
                       var baseinfo = obj[i];
                       str += "<option class=\"selectOpenStyle\" value='" + baseinfo.id + "'>" + baseinfo.key + "</option>>"
                    }
                }
                $("#" + id).append(str);

            } else if (data.status == 'error'){
                alert(data.msg);
            } else {
                alert("未知情况");
            }
            //关闭弹出层
            layer.close(index);
        },
        error:function(e){
            //关闭弹出层
            layer.close(index);
            alert("错误！！" + e);
        }

    });
}

/**
 * 删除指定Select 下的全部的 option
 * id ： Select 下的id
 */
function removeOptionAll(id){
    var obj=document.getElementById(id);
    if (obj != null){
        obj.options.length=0;
    }
}

/**
 * 检查数据是否是空，如果是空则返回空字符串，否则原样返回
 * @param strData 待检测的字符串
 * @returns {*}
 */
function nullHandle(strData){
    if (checkNull(strData)){
        return "";
    } else {
        return strData;
    }
}

/**
 * 清空from表单
 * @param id from表单ID
 */
function clearForm(id) {
    var objId = document.getElementById(id);
    if (objId == undefined) {
        return;
    }
    for (var i = 0; i < objId.elements.length; i++) {
        if (objId.elements[i].type == "text") {
            objId.elements[i].value = "";
        } else if (objId.elements[i].type == "password") {
            objId.elements[i].value = "";
        } else if (objId.elements[i].type == "radio") {
            objId.elements[i].checked = false;
        } else if (objId.elements[i].type == "checkbox") {
            objId.elements[i].checked = false;
        } else if (objId.elements[i].type == "select-one") {
            objId.elements[i].options[0].selected = true;
        } else if (objId.elements[i].type == "select-multiple") {
            for (var j = 0; j < objId.elements[i].options.length; j++) {
                objId.elements[i].options[j].selected = false;
            }
        } else if (objId.elements[i].type == "textarea") {
            objId.elements[i].value = "";
        } else if (objId.elements[i].type == "file") {
            objId.elements[i].value = "";
        }

    }
}

/**
 * 替换指定id里的字符串
 * @param id 要替换的id
 * @param str
 */
function replaceAppoint(id, str){
    var dt = document.getElementById(id);
    dt.innerHTML = str;
}


// ***************************************long 转换为时间
/**
 * 时间格式化工具
 * 把Long类型的1527672756454日期还原yyyy-MM-dd格式日期
 */
function dateFormat(longTypeDate){
    if (checkNull(longTypeDate)){
        return "";
    }
    var dateTypeDate = "";
    var date = new Date();
    date.setTime(longTypeDate);
    dateTypeDate += date.getFullYear(); //年
    dateTypeDate += "-" + getMonth(date); //月
    dateTypeDate += "-" + getDay(date); //日
    return dateTypeDate;
}

//返回 01-12 的月份值
function getMonth(date){
    var month = "";
    month = date.getMonth() + 1; //getMonth()得到的月份是0-11
    if(month<10){
        month = "0" + month;
    }
    return month;
}
//返回01-30的日期
function getDay(date){
    var day = "";
    day = date.getDate();
    if(day<10){
        day = "0" + day;
    }
    return day;
}
// ***************************************long 转换为时间

/**
 * 指定radio 选中，根据name和值来定位要选中和不选中的数据
 * @param name 要选中的radio的name
 * @param checkedValue 要选中的那个的值
 * @param noCheckedVal 不选中的那个值
 */
function radioChecked(name, checkedValue, noCheckedVal) {
    $("input[type=radio][name=" + name + "][value=" + checkedValue + "]").attr("checked", true);
    $("input[type=radio][name=" + name + "][value=" + noCheckedVal + "]").attr("checked", false);
}

/**
 * 设置radio的选中和不选择中
 * @param name 要选中的radio的name
 * @param checkValue 要选中的那个的值
 */
function redioCheck(name, checkValue) {
    if (checkNull(name)){
        return;
    }
    $(":radio[name='" + name + "']").removeAttr("checked");
    $(":radio[name='" + name + "'][value='" + checkValue + "']").prop("checked", "checked");
}